// 首页 相关的路由
var express = require('express');
var router = express.Router();
// 导入数据库连接对象
var db = require("../db/db.js");
const jwt = require('jsonwebtoken')

// 1.用户注册
router.post('/register', function (req, response) {
    // 先获取用户的请求数据，存到变量“body”中
    // 用结构复制把用户请求数据里面的的“username, pwd”分别拿出来，方便接下来向数据库中添加数据时使用
    let { username, pwd } = req.body

    // 获取当前时间的毫秒数
    var date = new Date()
    console.log(req.body, username, pwd, date.getTime())
    var ctime = date.getTime();

    // 添加数据之前先判断数据库中是否已经存在相同的账户和密码，所以这里用到了SQL语句中的查询数据语句
    db('SELECT * FROM users where  username = ?', [username], function (error, results) {
        console.log(results)
        if (error) {
            response.end({ data: [], code: -2, msg: '用户已存在，请重新输入' })
        }

        // 判断如果“账户名-手机号”已经存在则提示：用户已存在，请重新输入
        if (results.length>0) {
            response.json({ data: [], code: -1, msg: '用户已存在，请重新输入' })
        } else {
            // 判断如果用户不存在则就向数据库中添加请求数据
            db('INSERT INTO users ( `username`,`pwd`,`ctime`) VALUES (?,?,?)', [username, pwd, ctime], function (err, results) {
                // 响应数据
                if (err) {
                    console.log('注册失败', err)
                    response.json({ code: 1, msg: "操作失败", data: { err } })
                } else {
                    response.json({ code: 0, msg: "注册完成", data: { username: username, date: ctime } })
                }
                console.log(err + 'ok了!')
            });
        }
    });
})

// 2.用户登录
router.post('/login', function (req, response) {
    var body = req.body
    console.log(req.body)

    let { username, pwd } = body
    console.log(username, pwd)
    // 先查询账号是否存在
    db('SELECT username FROM users where username = ?', [username], function (error, results) {
        if (error) {
            console.log(error)
        }
        if (results[0]) {
            // 如果账号存在的话继续查询账号密码
            db('SELECT username,id FROM users where username = ? and pwd = ?', [username, pwd], function (error, results) {
                // 相应数据
                // 注意：如果账号不存在时，“results”中的数据为空。———
                // ———所以在判断账号密码是否一致时的条件要注意，不能为“results[0].属性名”，否则会报错
                console.log('shuju:', results)

                if (results[0]) {
                    let user = results[0]
                    // 注意默认情况 Token 必须以 Bearer+空格 开头
                    const token = 'Bearer ' + jwt.sign(
                        {
                            uid: user.id,
                            username: user.username
                        },
                        'blog_xpx',
                        {
                            expiresIn: 3600 * 24 * 10
                        }
                    )
                    // 账号密码一致则返回用户需要的数据
                    response.json({
                        code: 0, msg: "登录完成",
                        data: {
                            userid: results[0].id,
                            user_username: username,
                            status: 'ok',
                            token: token
                        }
                    })
                    // 账号密码一致则返回用户需要的数据
                    // response.json({ userid: results[0].id, user_username: username })
                } else {
                    response.json({
                        code: 1,
                        msg: '用户名或密码不正确',
                    })
                    // 账号密码一致则提示：账号或密码不正确，请重新输入
                    // response.end('账号或密码不正确，请重新输入')
                }
            });
        } else {
            // 账号不存在则提示：账号不存在，请输入正确的账号
            response.send({ code: 1, msg: '账号不存在，请输入正确的账号' })
        }
    })
})

// 3.退出登录的接口
router.get('/logout', function (req, res, next) {
    var user_info = { uid: 0, username: "" };
    var token = "Bearer " + jwt.sign(
        user_info,
        //要失效token必须等待过期，或者重置盐值
        "brqclogout", //修改盐值,让过期
        {
            algorithm: "HS256",
            expiresIn: 0
        }
    );
    console.log(req.user)
    var msg = { "msg": "退出成功", code: 0, token };//返回新的token，客户端更新一下token
    res.json(msg)
})

// 4.个人信息修改--获取个人信息
router.get("/get_user_info", function (req, res) {
    console.log(req.auth)
    db("select id,username,ctime,pwd from users where id = ?", [req.auth.uid], (err, result, fields) => {
        if (err) {
            console.log("sql error:", err)
            res.json({ code: -1, msg: err.sql })
        }
        res.send({ code: 0, msg: "获取成功", data: result[0] })
    })
})

// 5.个人信息修改--保存个人信息
router.post("/set_user_info", function (req, res) {
    console.log(req.auth) //用户信息
    let { username, pwd } = req.body;
    const uid = req.auth.uid; //用户id

    if (!username) {
        res.json({ code: -2, msg: "缺少用户名~" })
    }

    if (!pwd) {
        res.json({ code: -3, msg: "缺少密码~" })
    }
    db("SELECT * FROM users WHERE `username` = ? AND id != ?", [username,uid], (error, result) => {
        if (error) {
            console.log(error)
        } else {
            if (result[0]) {
                res.json({ code: 1, msg: "此用户名已经存在！！" })
            } else {
                db("update users set username = ?,pwd = ? where id = ?", [username, pwd, req.auth.uid], (err, result, fields) => {
                    if (err) {
                        console.log("sql error:", err)
                        res.json({ code: -1, msg: err.sql })
                    }
                    res.json({ code: 0, msg: "修改成功", data: result[0] })
                })
            }
        }
    })

})

module.exports = router;